﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entidades;

namespace Logica
{
    public class BusBLL
    {
        public BusDTO getBus(string Placa)
        {
            justimeEntities bd = new justimeEntities();
            bus bus1 = bd.buses.Where(t => t.Placa == Placa).FirstOrDefault();
            BusDTO busx = new BusDTO();
            busx.Placa = bus1.Placa;
            busx.Modelo = bus1.Modelo;
            busx.Color = bus1.Color;
            busx.NumeroMotor = bus1.NumeroMotor;
            busx.Password = bus1.Password;
            return busx;  
        }

        public RutaDTO getRutaBus(string plac)
        {
            justimeEntities bd = new justimeEntities();
            bus movBus = bd.buses.Where(t => t.Placa == plac).FirstOrDefault();
            ruta ruta1 = bd.rutas.Where(t => t.NomRuta == movBus.Ruta).FirstOrDefault();
            RutaDTO ruta2 = new RutaDTO();
            ruta2.NomRuta = ruta1.NomRuta;
            ruta2.NumBuses = Convert.ToInt32(ruta1.NumBuses);
            ruta2.TiempoRecorrido = float.Parse(ruta1.TiempoRecorrido.ToString());
            ruta2.Distancia = float.Parse(ruta1.Distancia.ToString());
            ruta2.Descripcion = ruta1.Descripcion;
            return ruta2;
        }

        public List<MovBusDTO> ObtenerCoordenadas(string NomRuta) 
        {
            justimeEntities bd = new justimeEntities();
            List<bus> lBuses = bd.buses.Where(t => t.Ruta == NomRuta).ToList();
            List<MovBusDTO> lMovBuses = new List<MovBusDTO>();
            if (lBuses != null)
            {
                foreach (bus item in lBuses)
                {
                    historialmovimiento UltPosisionBus = bd.historialmovimientos.Where(t => t.Placa == item.Placa).OrderByDescending(t => t.Fecha).FirstOrDefault();
                    if (UltPosisionBus != null)
                    {
                        MovBusDTO movBus = new MovBusDTO();
                        movBus.Latitud = UltPosisionBus.Latitud;
                        movBus.Longitud = UltPosisionBus.Longitud;
                        movBus.Placa = UltPosisionBus.Placa;
                        movBus.Velocidad = UltPosisionBus.Velocidad.ToString();
                        lMovBuses.Add(movBus);
                    }
                }
                return lMovBuses;
            }
            else
            {
                return null;
            }
        }

        public List<BusDTO> ObtenerTodosBuses()
        {
            justimeEntities bd = new justimeEntities();
            List<bus> lBuses = bd.buses.ToList();
            List<BusDTO> lrBuses = new List<BusDTO>();
            foreach (bus item in lBuses)
            {
                BusDTO rBus = new BusDTO();
                rBus.Placa = item.Placa;
                rBus.Color = item.Color;
                rBus.Modelo = item.Modelo;
                rBus.NumeroMotor = item.NumeroMotor;
                rBus.Password = item.Password;
                lrBuses.Add(rBus);
            }
            return lrBuses;
        }

        public string NuevoBus(string Placa, string Color, string Modelo, string NumeroMotor, string Password)
        {
            try
            {
                justimeEntities bd = new justimeEntities();

                bus iBus = new bus();
                iBus.Placa = Placa;
                iBus.Modelo = Modelo;
                iBus.Color = Color;
                iBus.NumeroMotor = NumeroMotor;
                iBus.Password = Password;
                iBus.Ruta = "SIN RUTA";
                bd.buses.Add(iBus);
                bd.SaveChanges();
                return "ok";
            }
            catch (Exception e)
            {
                return "ko";
            }

         
        }

        public string EliminarBus(string Placa)
        {
            justimeEntities bd = new justimeEntities();
            bus bus1 = bd.buses.Where(t => t.Placa == Placa).FirstOrDefault();
            if (bus1 != null)
            {
                                       
                List<controlbus> lctrlB = bd.controlbuses.Where(k => k.Placa == Placa).ToList();
                if (lctrlB != null)
                {
                    foreach (controlbus item2 in lctrlB)
                    {
                        bd.controlbuses.Remove(item2);
                        bd.SaveChanges();
                    }
                }
                
                List<historialmovimiento> lHis = bd.historialmovimientos.Where(v => v.Placa == Placa).ToList();
                if (lHis != null)
                {
                    foreach (historialmovimiento item4 in lHis)
                    {
                        bd.historialmovimientos.Remove(item4);
                    }
                    bd.SaveChanges();
                }

                bd.buses.Remove(bus1);
                bd.SaveChanges();
                return "true";
            }
            else
            {
                return "false";
            }
        }

        public string LoguearBus(string plac, string pass)
        {
            justimeEntities bd = new justimeEntities();
            bus bus1 = bd.buses.Where(t => t.Placa == plac).FirstOrDefault();
            if (bus1 != null)
            {
                if (bus1.Password == pass)
                {
                    return "true";
                }
                else
                {
                    return "false";
                }
            }
            else
            {
                return "false";
            }
        }

        public void EnviarCoordenadas(string plac, string latitud, string longitud, string Velocidad, string Punto)
        {
            justimeEntities bd = new justimeEntities();
            
            historialmovimiento his = new historialmovimiento();
            his.Placa = plac;
            his.Latitud = latitud;
            his.Longitud = longitud;
            his.Velocidad = int.Parse(Velocidad);
            his.Fecha = DateTime.Now;
            his.Punto = Punto;
            bd.historialmovimientos.Add(his);
            bd.SaveChanges();
        }
    }
}